﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DataAccess;
using System.Configuration;
using System.IO;
using System.Drawing.Imaging;

namespace ProcesarFotografiasBD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            cmbBD.SelectedIndex = 0;
        }

        private void btnExaminar_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();

            if (dialog.ShowDialog(this) == DialogResult.OK)
            {
                txtFolder.Text = dialog.SelectedPath;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtFolder.Text) && System.IO.Directory.Exists(txtFolder.Text))
            {
                //Obtener Imagenes en BD y Guardarlas
                DataAccessCommand commando = new DataAccessCommand("SELECT idCasa,fotografiaCasa FROM casa", CommandType.Text);
                DataAccessDAO dao = DataAccessDAO.GetInstance();

                List<CasaResultPhoto> casas = dao.GetList<CasaResultPhoto>(commando);

                //Se procesan fotos...
                int contador = 0;

                foreach (CasaResultPhoto casaResult in casas)
                {
                    if (casaResult.Fotografia != null)
                    {
                        contador++;

                        Bitmap imagen = (Bitmap)Image.FromStream(new MemoryStream(casaResult.Fotografia));

                        imagen.SetResolution(400, 300);

                        //Se guarda la imagen y se sobreescribe la anterior
                        imagen.Save(String.Format("{0}/{1}.jpg", txtFolder.Text, casaResult.ID), ImageFormat.Jpeg);
                        
                        imagen.Dispose();

                        //Tratamos de llamar al Garbage Collection para que elimine el objeto
                        GC.SuppressFinalize(imagen);
                    }
                }

                MessageBox.Show(String.Format("Proceso Finalizado, se proceso {0} fotografias", contador));
            }
            else
            {
                MessageBox.Show("Seleccione una carpeta o pongala en la caja de texto");
                btnExaminar.PerformClick();
            }
        }
    }
    internal class CasaResultPhoto
    {
        [DataAccessPropierties("idCasa")]
        public int ID { get; set; }

        [DataAccessPropierties("fotografiaCasa")]
        public byte[] Fotografia { get; set; }
    }
}
